Rust (tiny-http)でのPiping Server実装
https://gh-card.dev/repos/nwtgck/tiny-http-piping-server-rust.svg https://github.com/nwtgck/tiny-http-piping-server-rust
対して、tiny-httpのリクエストハンドリングは、request.respond(response)のように書くことができ、好きなタイミングでresponseをやってきたリクエストに返すことができるAPIになっている。それとリクエストのacceptループ(?)をfor request in server.incoming_requests() {}のように書ける。つまり、リクエストを待ち受ける処理がシングルスレッド。ハンドラがfnとかにならない。ArcとかMutexとかもなしで、変数を他のリクエストと安全に共有しやすかった。 Node.js(TypeScript) vs Hyper vs Tiny-http の転送速度の比較
https://youtu.be/QiWXDs-Gz4k
各種バージョン
TypeScript: v0.11.4
Rust (Hyper): v0.1.0
Rust (tiny-http): 1e1a6f554117b379f7bc02ed6bcde7b86f9f1c10
結果は、1秒あたりの速度はHyperが一番速かった。だいたい 1.6GB/秒ぐらい。
(>の左がより速い)
Hyperのときだけファンがよく回るのでCPUとかも使い方も違うのだと思う。単純な転送速度だけではなくてメモリ使用率とかCPU使用率とかもちゃんと比較したいならすべきだと思う。 https://gyazo.com/c3ecf13597ce3be408007b7d95de6a4d
サーバーの動かし方
以下のREADMEのようにcargo runまたは、配布しているDockerイメージをdocker runしてもサーバーを立てることができる。 対応していない機能
複数受信
Multipart